/*
 *  Copyright (c) 2008 Howard Shank
 * Permission is hereby granted, free of charge, to any person obtaining a copy of 
 * this software and associated documentation files (the "Software"), to deal in 
 * the Software without restriction, including without limitation the rights to use, 
 * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the 
 * Software, and to permit persons to whom the Software is furnished to do so, subject 
 * to the following conditions:

 * The above copyright notice and this permission notice shall be included in all copies or 
 * substantial portions of the Software.

 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

using System;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.ComponentModel;
using System.ComponentModel.Design;
using AjaxCtrlsExtenders;
using AjaxControlToolkit;

[assembly: System.Web.UI.WebResource("AjaxCtrlsExtenders.DragDropListbox.DragDropListboxBehavior.js", "text/javascript")]

namespace AjaxCtrlsExtenders
{
    [Serializable()]
    [Designer(typeof(DragDropListboxDesigner))]
    [ClientScriptResource("AjaxCtrlsExtenders.DragDropListboxBehavior", "AjaxCtrlsExtenders.DragDropListbox.DragDropListboxBehavior.js")]
    [TargetControlType(typeof(AjaxDragDropListBox))]
    //[TargetControlType(typeof(ListBox))]
    public class DragDropListboxExtender : ExtenderControlBase
    {
        public override void EnsureValid()
        {
            base.EnsureValid();
        }

        [ExtenderControlProperty]
        [DefaultValue("")]
        [Description("Drop listbox TargetID")]
        [IDReferenceProperty(typeof(ListControl))]
        [RequiredProperty]
        public string DropTargetID
        {
            get
            {
                return GetPropertyValue<string>("DropTargetID", "");
            }
            set
            {
                SetPropertyValue<string>("DropTargetID", value);
            }
        }

        [ExtenderControlProperty]
        [DefaultValue(DragMode.Default)]
        [Description("Move or Copy the listbox item")]
        [RequiredProperty] // TODO: Why does this not work for me?
        public DragMode Action
        {
            get
            {
                return GetPropertyValue<DragMode>("Action", DragMode.Move);
            }
            set
            {
                DragMode newval = DragMode.Move;
                if (value == DragMode.Move || value == DragMode.Copy)
                {
                    newval = value;
                };
                SetPropertyValue<DragMode>("Action", newval);
            }
        }

        [ExtenderControlProperty]
        [Description("Require value to be unique in the target listbox")]
        [RequiredProperty]
        public bool Unique
        {
            get
            {
                return GetPropertyValue<bool>("Unique", true);
            }
            set
            {
                SetPropertyValue<bool>("Unique", value);
            }
        }
    }
}
